Úloha 3.
Na narodeniny ste dostali stavebnicu s robotom a vysielačom. Jednou z jeho funkcií bolo dôjsť do minúty k vysielaču. Ak už prešlo 50 sekúnd a robot pri vysielači ešte nebol, tak vysielač začal blihať. Časom sa ale s robotom niečo stalo a k vysielaču nešiel priamo, ale tak ako sa mu chcelo. Raz dopredu, raz dozadu. Vždy o iný počet krokov. Ale nikdy nie o veľa. Pozorovaním tejto situácie ste prišli nato, že ak robot nedôjde k vysielaču do minúty, tak zastane a nič sa nedeje.
Simuláciou tejto situácie v Rolobabe vznikli nasledujúce programy. Zistite, kde sa nachádza v programoch chyba a pokúste sa ju opraviť.
RCX1
RCX2
- V programe RCX1 sledujeme dve udalosti. Dotučenie správy (modrá udalosť) a prekročenie času 1 minúta (červená udalosť). Pri definíci udalosti presiahnutia času, používame preddefinovanú červenú udalosť. Pri definovaní oblasti sledovania udalostí, používame už konkrétne typy udalostí, pretože ich chceme sledovať naraz. Robolab by vám nedovolil do kocky nahrať takýto program. Musíte využívať preddefinovaný typ udalosti v celom programe alebo ich definujete v celom programe. Kombinácia definícii nie je povolená.
- Ak kocka má počítať čas, tak je vhodné, aby sa odpočítavane začalo až vtedy, keď sa začne program vykonávať. Nie v čase, keď ešte nie je spustený program v druhej kocke, alebo napríklad ak sa ešte nastavujú pozície autíčok.
- Pre správnu spoluprácu programov musia obidva vedieť, od kedy sa začína beh programu. Vykonávanie jedného programu začíname my stlačením dotykovho senzora a druhá RCX kocka začne pracovať až vtedy, keď dostane povel (prijatie správy) od prvej kocky.
- V obidvoch programoch je sledovanie dvoch udalostí. Po prejdení oblasti sledovania je vhodné rozlíšiť, či sa nastala 1. alebo 2. udalosť. Podľa toho nasleduje ďalšie vykonávanie príkazov. Tak zabránime tomu, by sa niektoré príkazy vykonávali zbytočne. Ako je to v tom to prípade. Ak na RCX1 nastane udalosť je potrebné zastaviť kocku RCX2. Musí byť poslaná správa. Ak však RCX2 narazí do prvej kocky, tak pošle správu RCX1. Potom nastane udalosť doručenia správy a program kocky skončí. Nemusí byť poslaná spáva. Je to úplne zbytočné. Rovnaký princíp platí aj pri nastaní udalosti v RCX2.
RCX1
RCX2
|